package com.gitee.ec.kernel;

import com.gitee.ec.common.OutputItemName;
import com.gitee.ec.common.SortBy;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.Arrays;
import java.util.List;

/**
 * 检索条件
 *
 * @author hongda.li
 */
@Data
@Accessors(chain = true)
public class SearchCondition {

    /**
     * 指定要返回的最大结果数
     * 默认结果数为 100
     */
    private Integer limit = 100;

    /**
     * 指定要返回数据的偏移量
     * 默认偏移量为 0
     */
    private Integer offset = 0;

    /**
     * 排序方式
     */
    private SortBy sortBy = SortBy.EVERYTHING_SORT_NAME_ASCENDING;

    /**
     * 指定查询项名称
     */
    private List<OutputItemName> outputList = Arrays.asList(OutputItemName.values());

    /**
     * 检索表达式
     */
    private String expression;

    /**
     * 指定是启用还是禁用完整路径匹配
     * 如果启用了匹配完整路径，则下次调用 Everything_Query 将搜索每个文件和文件夹的完整路径和文件名
     * 如果禁用了匹配完整路径，则下次调用 Everything_Query 将仅搜索每个文件和文件夹的文件名
     * 默认情况下，匹配路径处于禁用状态
     * 启用匹配路径将显著提高性能影响
     */
    private Boolean enableMatchPath = Boolean.FALSE;

    /**
     * 指定搜索区分大小写还是不区分大小写
     * 默认情况下，匹配大小写处于禁用状态
     */
    private Boolean enableMatchCase = Boolean.FALSE;

    /**
     * 设置是否启用正则表达式
     * 默认情况下，正则表达式处于禁用状态
     */
    private Boolean enableMatchRegex = Boolean.FALSE;

    /**
     * 指定搜索是匹配整个单词，还是可以匹配任何位置。
     * 如果此参数为 true，则搜索仅匹配整个单词。
     * 如果参数为 false，则搜索可以在任何位置进行
     * 默认情况下，匹配整个单词处于禁用状态
     */
    private Boolean enableMatchWholeWord = Boolean.FALSE;
}
